.TH std::ranges::cartesian_product_view::cartesian_product_view 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::ranges::cartesian_product_view::cartesian_product_view \- std::ranges::cartesian_product_view::cartesian_product_view

.SH Synopsis
   constexpr cartesian_product_view() = default;                      \fB(1)\fP (since C++23)
   constexpr explicit cartesian_product_view( First first_base, Vs... \fB(2)\fP (since C++23)
   bases );

   Constructs an cartesian_product_view.

   1) Default constructor. Default-initializes the underlying data member base_.
   2) Move constructs the underlying base_ by initializing it with
   std::move(first_base), std::move(bases)....

.SH Parameters

   first_base - the first view object to adapt
   bases      - the pack of views objects to adapt

.SH Example


// Run this code

 #include <array>
 #include <format>
 #include <iostream>
 #include <ranges>
 #include <vector>

 int main()
 {
     auto x = std::array{'A', 'B'};
     auto y = std::vector{1, 2, 3};
     auto z = std::vector{-1, -2, -3};

     auto v = std::ranges::cartesian_product_view(x, y, z); // overload (2)

     for (int i{1}; auto const& [rx, ry, rz] : v)
         std::cout << std::format("({} {} {}){}", rx, ry, rz, (i++ % 3) ? ' ' : '\\n');
 }

.SH Output:

 (A 1 -1) (A 1 -2) (A 1 -3)
 (A 2 -1) (A 2 -2) (A 2 -3)
 (A 3 -1) (A 3 -2) (A 3 -3)
 (B 1 -1) (B 1 -2) (B 1 -3)
 (B 2 -1) (B 2 -2) (B 2 -3)
 (B 3 -1) (B 3 -2) (B 3 -3)
